/*
 * Copyright (c) 2021-2022, Xilinx, Inc.
 * Copyright (c) 2022, Advanced Micro Devices, Inc.
 * All rights reserved.
 *
 * Author: ${user}, Xilinx Research Labs.
 *
 * This file is part of RapidWright.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
package com.xilinx.rapidwright.interchange;

import java.util.HashMap;
import java.util.Map;

import com.xilinx.rapidwright.device.Series;

/**
 * Generated by com.xilinx.rapidwright.interchange.PopulateMacroParamRules on Fri Jul 30 18:54:58 2021
 * RapidWright version: 2020.2.7
 * Vivado version: v2020.2
 */
public class MacroParamMappingRules {

    public static Map<Series,Map<String,MacroParamRule[]>> macroRules;

    static {
        macroRules = new HashMap<>();
        Map<String, MacroParamRule[]> currMap = null;
        currMap = new HashMap<>();

        // *** Begin Series.Series7
        macroRules.put(Series.Series7, currMap);
        currMap.put("RAM128X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.LOW", "INIT", 0, 64),
        });
        currMap.put("RAM64X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 64),
        });
        currMap.put("RAM64M8", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAME", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMF", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMG", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMH", "INIT", 0, 64),
        });
        currMap.put("RAM256X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64E_A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_D", "INIT", 0, 64),
        });
        currMap.put("RAM32X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 32),
        });
        currMap.put("RAM16X2S", new MacroParamRule[] {
        });
        currMap.put("RAM128X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM64X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM64X1S0", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_01", "RAM64X1S1", "INIT", 0, 64),
        });
        currMap.put("RAM16X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM16X2S0", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_01", "RAM16X2S0", "INIT_01", 0, 16),
            MacroParamRule.bitRange("INIT_02", "RAM16X2S1", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_03", "RAM16X2S1", "INIT_01", 0, 16),
        });
        currMap.put("RAM32M16", new MacroParamRule[] {
        });
        currMap.put("RAM64M", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
        });
        currMap.put("RAM32M", new MacroParamRule[] {
        });
        currMap.put("RAM16X8S", new MacroParamRule[] {
        });
        currMap.put("RAM32X8S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_02", "RAM32X4S0", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X4S0", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_00", "RAM32X4S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X4S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_06", "RAM32X4S1", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_07", "RAM32X4S1", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_04", "RAM32X4S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_05", "RAM32X4S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM256X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "D", "INIT", 0, 64),
        });
        currMap.put("RAM256X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "DP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "DP.D", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "SP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "SP.D", "INIT", 192, 64),
        });
        currMap.put("LUT6_2", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "LUT5", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "LUT6", "INIT", 0, 64),
        });
        currMap.put("RAM32X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X2S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X2S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_02", "RAM32X2S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X2S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM128X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM32X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X1S0", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X1S1", "INIT", 0, 32),
        });
        currMap = new HashMap<>();

        // *** Begin Series.UltraScale
        macroRules.put(Series.UltraScale, currMap);
        currMap.put("RAM128X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.LOW", "INIT", 0, 64),
        });
        currMap.put("RAM64X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 64),
        });
        currMap.put("RAM64X8SW", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMS64E1_A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMS64E1_B", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMS64E1_C", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMS64E1_D", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAMS64E1_E", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMS64E1_F", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMS64E1_G", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMS64E1_H", "INIT", 0, 64),
        });
        currMap.put("RAM64M8", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAME", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMF", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMG", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMH", "INIT", 0, 64),
        });
        currMap.put("RAM256X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64E_A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_D", "INIT", 0, 64),
        });
        currMap.put("RAM32X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 32),
        });
        currMap.put("RAM16X2S", new MacroParamRule[] {
        });
        currMap.put("RAM128X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM512X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64E1_A", "INIT", 448, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_B", "INIT", 384, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_C", "INIT", 320, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_D", "INIT", 256, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_E", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_F", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_G", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_H", "INIT", 0, 64),
        });
        currMap.put("RAM64X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM64X1S0", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_01", "RAM64X1S1", "INIT", 0, 64),
        });
        currMap.put("RAM16X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM16X2S0", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_01", "RAM16X2S0", "INIT_01", 0, 16),
            MacroParamRule.bitRange("INIT_02", "RAM16X2S1", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_03", "RAM16X2S1", "INIT_01", 0, 16),
        });
        currMap.put("RAM32M16", new MacroParamRule[] {
        });
        currMap.put("RAM64M", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
        });
        currMap.put("RAM32M", new MacroParamRule[] {
        });
        currMap.put("RAM16X8S", new MacroParamRule[] {
        });
        currMap.put("RAM32X8S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_02", "RAM32X4S0", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X4S0", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_00", "RAM32X4S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X4S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_06", "RAM32X4S1", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_07", "RAM32X4S1", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_04", "RAM32X4S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_05", "RAM32X4S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM256X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "D", "INIT", 0, 64),
        });
        currMap.put("RAM256X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "DP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "DP.D", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "SP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "SP.D", "INIT", 192, 64),
        });
        currMap.put("LUT6_2", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "LUT5", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "LUT6", "INIT", 0, 64),
        });
        currMap.put("RAM32X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X2S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X2S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_02", "RAM32X2S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X2S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM128X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM32X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X1S0", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X1S1", "INIT", 0, 32),
        });
        currMap = new HashMap<>();

        // *** Begin Series.UltraScalePlus
        macroRules.put(Series.UltraScalePlus, currMap);
        currMap.put("RAM128X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.LOW", "INIT", 0, 64),
        });
        currMap.put("RAM64X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 64),
        });
        currMap.put("RAM64X8SW", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMS64E1_A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMS64E1_B", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMS64E1_C", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMS64E1_D", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAMS64E1_E", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMS64E1_F", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMS64E1_G", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMS64E1_H", "INIT", 0, 64),
        });
        currMap.put("RAM64M8", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAME", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMF", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMG", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMH", "INIT", 0, 64),
        });
        currMap.put("RAM256X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64E_A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E_D", "INIT", 0, 64),
        });
        currMap.put("RAM32X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 32),
        });
        currMap.put("RAM16X2S", new MacroParamRule[] {
        });
        currMap.put("RAM128X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM512X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64E1_A", "INIT", 448, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_B", "INIT", 384, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_C", "INIT", 320, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_D", "INIT", 256, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_E", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_F", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_G", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64E1_H", "INIT", 0, 64),
        });
        currMap.put("RAM64X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM64X1S0", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_01", "RAM64X1S1", "INIT", 0, 64),
        });
        currMap.put("RAM16X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM16X2S0", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_01", "RAM16X2S0", "INIT_01", 0, 16),
            MacroParamRule.bitRange("INIT_02", "RAM16X2S1", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_03", "RAM16X2S1", "INIT_01", 0, 16),
        });
        currMap.put("RAM32M16", new MacroParamRule[] {
        });
        currMap.put("RAM64M", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
        });
        currMap.put("RAM32M", new MacroParamRule[] {
        });
        currMap.put("RAM16X8S", new MacroParamRule[] {
        });
        currMap.put("RAM32X8S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_02", "RAM32X4S0", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X4S0", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_00", "RAM32X4S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X4S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_06", "RAM32X4S1", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_07", "RAM32X4S1", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_04", "RAM32X4S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_05", "RAM32X4S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM256X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "D", "INIT", 0, 64),
        });
        currMap.put("RAM256X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "DP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "DP.D", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "SP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "SP.D", "INIT", 192, 64),
        });
        currMap.put("LUT6_2", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "LUT5", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "LUT6", "INIT", 0, 64),
        });
        currMap.put("RAM32X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X2S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X2S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_02", "RAM32X2S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X2S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM128X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM32X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X1S0", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X1S1", "INIT", 0, 32),
        });
        currMap = new HashMap<>();

        // *** Begin Series.Versal
        macroRules.put(Series.Versal, currMap);
        currMap.put("RAM128X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "WE2_INST", "INIT", 124, 4),
        });
        currMap.put("RAM64X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 64),
        });
        currMap.put("RAM64X8SW", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMS64_A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMS64_B", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMS64_C", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMS64_D", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAMS64_E", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMS64_F", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMS64_G", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMS64_H", "INIT", 0, 64),
        });
        currMap.put("LUT6CY", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "LUTCY1_INST", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "LUTCY2_INST", "INIT", 32, 32),
        });
        currMap.put("RAM64M8", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_E", "RAME", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_F", "RAMF", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_G", "RAMG", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_H", "RAMH", "INIT", 0, 64),
        });
        currMap.put("RAM256X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "RAMS64_A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_D", "INIT", 192, 64),
        });
        currMap.put("RAM32X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "SP", "INIT", 0, 32),
        });
        currMap.put("RAM16X2S", new MacroParamRule[] {
        });
        currMap.put("RAM128X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "WE2_INST", "INIT", 124, 4),
        });
        currMap.put("RAM512X1S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "O_INST", "INIT", 292, 8),
            MacroParamRule.bitRange("INIT", "RAMS64_A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_D", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_E", "INIT", 256, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_F", "INIT", 320, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_G", "INIT", 384, 64),
            MacroParamRule.bitRange("INIT", "RAMS64_H", "INIT", 448, 64),
        });
        currMap.put("RAM64X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM64X1S0", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_01", "RAM64X1S1", "INIT", 0, 64),
        });
        currMap.put("RAM16X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM16X2S0", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_01", "RAM16X2S0", "INIT_01", 0, 16),
            MacroParamRule.bitRange("INIT_02", "RAM16X2S1", "INIT_00", 0, 16),
            MacroParamRule.bitRange("INIT_03", "RAM16X2S1", "INIT_01", 0, 16),
        });
        currMap.put("RAM32M16", new MacroParamRule[] {
        });
        currMap.put("RAM64M", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_A", "RAMA", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_B", "RAMB", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_C", "RAMC", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT_D", "RAMD", "INIT", 0, 64),
        });
        currMap.put("RAM32M", new MacroParamRule[] {
        });
        currMap.put("RAM16X8S", new MacroParamRule[] {
        });
        currMap.put("RAM32X8S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_02", "RAM32X4S0", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X4S0", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_00", "RAM32X4S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X4S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_06", "RAM32X4S1", "INIT_02", 0, 32),
            MacroParamRule.bitRange("INIT_07", "RAM32X4S1", "INIT_03", 0, 32),
            MacroParamRule.bitRange("INIT_04", "RAM32X4S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_05", "RAM32X4S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM256X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "A", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "B", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "C", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "D", "INIT", 0, 64),
        });
        currMap.put("RAM256X1D", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "DP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "DP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "DP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "DP.D", "INIT", 192, 64),
            MacroParamRule.bitRange("INIT", "SP.A", "INIT", 0, 64),
            MacroParamRule.bitRange("INIT", "SP.B", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "SP.C", "INIT", 128, 64),
            MacroParamRule.bitRange("INIT", "SP.D", "INIT", 192, 64),
        });
        currMap.put("LUT6_2", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "LUT5", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT", "LUT6", "INIT", 0, 64),
        });
        currMap.put("RAM32X4S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X2S0", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X2S0", "INIT_01", 0, 32),
            MacroParamRule.bitRange("INIT_02", "RAM32X2S1", "INIT_00", 0, 32),
            MacroParamRule.bitRange("INIT_03", "RAM32X2S1", "INIT_01", 0, 32),
        });
        currMap.put("ROM128X1", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT", "HIGH", "INIT", 64, 64),
            MacroParamRule.bitRange("INIT", "LOW", "INIT", 0, 64),
        });
        currMap.put("RAM32X2S", new MacroParamRule[] {
            MacroParamRule.bitRange("INIT_00", "RAM32X1S0", "INIT", 0, 32),
            MacroParamRule.bitRange("INIT_01", "RAM32X1S1", "INIT", 0, 32),
        });
    }
}
